/**
 * 动物类。演示类的继承。
 * <br>继承的优点：1.消除冗余，提高代码复用；2.提高扩展性和维护性；3.提高开发效率。
 * <br>继承的缺点？
 * <br>抽象类的定义：如果一个类没有准备好实例化，就可以定义为抽象类。
 * 用abstract关键字修饰它。抽象类一旦定义好，就不允许创建对象。
 */
public abstract class Animal extends Object { // 现在是抽象类了！
    protected String name; // 私有元素不能被继承！
    protected double weight; // 如果子类需要直接访问父类的元素，一般建议设为protected权限

    public Animal() {
        name = "无名";
    }

    public Animal(String name, double weight) {
        this.name = name;
        this.weight = weight;
    }

    /**
     * 所有子类的共性方法
     * 当子类需要展示自己的个性差异时，需要主动重写父类的方法
     * 这个技术就叫方法重写（区别于之前学的方法重载）
     * 规则：1.存在继承关系（上下级关系）；
     * 2.方法签名（返回类型、方法名、参数列表）必须完全一样；
     * 3.子类方法的权限，要>=父类方法的权限
     * 思考题：方法重写和方法重载有什么区别？各自用在什么场景？
     *
     * <br>如果一个父类的方法，不需要提供具体功能，有2种实现方案
     * 1.空方法（有方法体，但为空）——无法强制子类重写！容易忽略
     * 2.抽象方法（没有方法体）——会强制子类重写！！不容易忽略
     */
//    public void eat() {    }
    public abstract void eat(); // 没有方法体的方法
}

